home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-08-18 | 1.4 KB | 67 lines | [TEXT/Moml] |
- (* filename.mlp *)
-
- open CharVector;
-
- fun check_suffix name suff =
- let val name_len = size name
- val suff_len = size suff
- in
- name_len >= suff_len andalso
- extract(name, name_len - suff_len, SOME suff_len) = suff
- end;
-
- fun chop_suffix name suff =
- extract(name, 0, SOME (size name - size suff))
- ;
-
- val current_dir_name = ":";
-
- fun is_absolute n =
- let val len = size n
- fun h i =
- if i >= len then false
- else if extract(n, i, SOME 1) = ":" then true
- else h (i+1)
- in h 0 end;
-
- fun concat dirname filename =
- let val dirname1 =
- if is_absolute dirname
- then dirname
- else ":" ^ dirname
- val l = size dirname1 - 1
- val dirname2 =
- if l < 0 orelse extract(dirname1, l, SOME 1) = ":"
- then dirname1
- else dirname1 ^ ":"
- val len = size filename
- val filename2 =
- if len > 0 andalso extract(filename, 0, SOME 1) = ":"
- then extract(filename, 1, NONE)
- else filename
- in dirname2 ^ filename2 end
- ;
-
- fun colon_pos s =
- let fun pos i =
- if i < 0 then NONE else
- case extract(s, i, SOME 1) of
- ":" => SOME i
- | _ => pos (i - 1)
- in pos (size s - 1) end
- ;
-
- fun basename name =
- case colon_pos name of
- SOME p =>
- extract(name, p+1, NONE)
- | NONE => name
- ;
-
- fun dirname name =
- if name = ":" then name else
- case colon_pos name of
- SOME p => extract(name, 0, SOME p)
- | NONE => ":"
- ;
-